﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<string>
#include<stdio.h>
//long long Fib(int n)
//{
//	if (n == 1 || n == 2)
//		return 1;
//	long long a = 1, b = 1, c = 0;
//	//求第3个斐波那契数需要循环1次
//	//求第4个斐波那契数需要循环2次
//	//求第5个斐波那契数需要循环3次
//	//则求第n个斐波那契数需要循环n-2次
//	for (int i = 1; i <= n - 2; i++)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//		//        b=c;
//		//        a=b;    error:  a并没有得到原来b的值，a得到的是c的值 
//	}
//	return c;
//}
//
//
//int main()
//{
//	int n;
//	cin >> n;
//	cout << Fib(n);
//	return 0;
//}
//
//
//#include<stdio.h>
//
//void print(char a, char b)
//{
//	printf("%c->%c ", a, b);
//}
//
//
////n表示最初时A柱上盘子的个数
////pos1:起始柱 ，pos2:中转柱 , pos3：目的柱
//void hanoi(int n, char pos1, char pos2, char pos3)
//{
//
//	if (n == 1)//若A柱上最初只有一个盘子，直接将该盘子放到C柱上 
//		print(pos1, pos3);
//	else
//		return;
//}
//
//
//int main()
//{
//	int n;
//	char pos1 = 'A', pos2 = 'B', pos3 = 'C';
//	scanf("%d", &n);
//	hanoi(n, pos1, pos2, pos3);
//	return 0;
//}





//int main()
//{
//	int a = 1;
//	int b = 2;
//	int c = (a > b, a = b + 10, a, b = a + 1);
//	printf("%d", c);
//	return 0;
//}

//int main()
//{
//	int arr[5] = { 1,2,3,4,5 };//这里的[ ]是定义数组时的语法要求，不是下标引用操作符
//	arr[3] = 0;//这里的[ ]是下标引用操作符，它的操作数是数组名arr与下标3
//	return 0;
//}



//#include <stdio.h>
//void test1()
//{
//	printf("hehe\n");
//}
//void test2(const char* str)
//{
//	printf("%s\n", str);
//}
//int main()
//{
//	test1(); //这⾥的()就是作为函数调⽤操作符，它的操作数是函数名test1
//	test2("hello bit.");//这⾥的()也是函数调⽤操作符，它的操作数是函数名test2与参数"hello bit."
//	return 0;
//}


//int main()
//{
//	printf("%zd", sizeof(char));
//	return 0;
//}

//void test(int a)
//{
//	;
//}
//
//int main()
//{
//	char a = 0;
//	int b = 3;
//	printf("%d", a & b);
//	return 0;
//}


//int main()
//{
//	//char是signed char还是unsigned char是取决于编译器的，大多数编译器下(如VS2022)是signed char
//
//	char a = 10;
//	//a占1个字节，a的补码:00001010
//	char b = 120;
//	//同理b的补码:01111000
//	char c = a + b;
//	//a与b都是char类型，均小于4个字节，因此二者相加前都要提升为int类型
//	/*
//	1.将a提升为int类型
//	a是signed char，将它提升为int类型时，是按照它的符号位来提升的，符号位是什么就补什么
//	a提升为int类型后的补码:00000000000000000000000000001010
//	
//	2.将b提升为int类型
//	b是signed char，将它提升为int类型时，是按它的符号位来提升的，符号位是什么就补什么
//	b提升为int类型后的补码:00000000000000000000000001111000
//	                 
//	3.再计算a+b
//	a+b的补码:00000000000000000000000010000010
//	将a+b的值存到c中，由于c是char类型，只能存8个比特位，因此c中存储的是10000010
//	*/
//	printf("%d\n", c);
//	//%d是打印int类型的数据,而c是char类型的数据，因此要将c提升为int类型
//	//c是signed char，将它提升为int类型时，是按它的符号位来提升的，符号位是什么就补什么
//	//c的补码:10000010
//	//将c提升为int类型后的补码:11111111111111111111111110000010 （最高位为1,说明是负数）
//	//将c提升为int类型后的原码:10000000000000000000000001111110，即-126
//	return 0;
//}


//int main()
//{
//	//char是signed char还是unsigned char是取决于编译器的，大多数编译器下(如VS2022)是signed char
//
//	char a = 10;
//	//a占1个字节，a的补码:00001010
//	char b = 120;
//	//同理b的补码:01111000
//	char c = a + b;
//	//a与b都是char类型，均小于4个字节，因此二者相加前都要提升为int类型
//	/*
//	1.将a提升为int类型
//	a是signed char，将它提升为int类型时，是按照它的符号位来提升的，符号位是什么就补什么
//	a提升为int类型后的补码:00000000000000000000000000001010
//
//	2.将b提升为int类型
//	b是signed char，将它提升为int类型时，是按它的符号位来提升的，符号位是什么就补什么
//	b提升为int类型后的补码:00000000000000000000000001111000
//
//	3.再计算a+b
//	a+b的补码:00000000000000000000000010000010
//	将a+b的值存到c中，由于c是char类型，只能存8个比特位，因此c中存储的是10000010
//	*/
//	printf("%d\n", c);
//	//%d是打印int类型的数据,而c是char类型的数据，因此要将c提升为int类型
//	//c是signed char，将它提升为int类型时，是按它的符号位来提升的，符号位是什么就补什么
//	//c的补码:10000010
//	//将c提升为int类型后的补码:11111111111111111111111110000010 （最高位为1,说明是负数）
//	//将c提升为int类型后的原码:10000000000000000000000001111110，即-126
//	return 0;
//}

//int main()
//{
//	//char是signed char还是unsigned char是取决于编译器的，大多数编译器下(如VS2022)是signed char
//
//	char a = 10;
//	//a占1个字节，a的补码:00001010
//	char b = 120;
//	//同理b的补码:01111000
//	char c = a + b;
//	//a与b都是char类型，均小于4个字节，因此二者相加前都要提升为int类型
//	/*
//	1.将a提升为int类型
//	a是signed char，将它提升为int类型时，是按照它的符号位来提升的，符号位是什么就补什么
//	a提升为int类型后的补码:00000000000000000000000000001010
//
//	2.将b提升为int类型
//	b是signed char，将它提升为int类型时，是按它的符号位来提升的，符号位是什么就补什么
//	b提升为int类型后的补码:00000000000000000000000001111000
//
//	3.再计算a+b
//	a+b的补码:00000000000000000000000010000010
//	将a+b的值存到c中，由于c是char类型，只能存8个比特位，因此c中存储的是10000010
//	*/
//	printf("%u\n", c);
//	//%u是打印unsigned int类型的数据,而c是char类型的数据，因此要将c提升为unsigned int类型
//	//c是signed char，将它提升为int类型时，是按照它的符号位来提升的，符号位是什么就补什么
//	//c的补码:10000010
//	//
//	//c提升为unsigned int类型后的补码:11111111111111111111111110000010
//	//c提升为unsigned int类型后的原码:11111111111111111111111110000010,即4294967170
//	return 0;
//}


//int main()
//{
//	char a = 0xb6;
//	//0xb6的原码: 10110110
//	//a在内存中存的值: 11001010
//	//a提升为int类型的补码:11111111111111111111111111001010
//	//                     10000000000000000000000000110101
//	//a提升为int类型的原码:10000000000000000000000000110110 ,即-54
//	printf("%d\n", a);
//	short b = 0xb600;
//	int c = 0xb6000000;
//	if (a == 0xb6)//a是char类型的(小于4个字节)，它在进行运算前会先被提升为int类型
//		          //因此在判断是否相等时，是将a提升为int类型后的值与0xb6进行比较
//		printf("a");
//	if (b == 0xb600)//b是short类型的(小于4个字节)，它在进行运算前会被先提升为int类型
//		          //因此在判断是否相等时，是将b提升为int类型后的值与0xb6进行比较
//		printf("b");
//	if (c == 0xb6000000)//c是int类型的(等于四个字节)，不需要进行整形提升
//		printf("c");    //这里就是判断c的值与0xb6000000是否相等
//	return 0;
//}




//int main()
//{
//	char a = 0xb6;
//	short b = 0xb600;
//	int c = 0xb6000000;
//	if (a == 0xb6)//a是char类型的(小于4个字节)，它在进行运算前会先被提升为int类型
//		          //因此在判断是否相等时，是将a提升为int类型后的值与0xb6进行比较，a提升后变成了负数
//		printf("a");
//	if (b == 0xb600)//b是short类型的(小于4个字节)，它在进行运算前会被先提升为int类型
//		          //因此在判断是否相等时，是将b提升为int类型后的值与0xb6进行比较，b提升后变成了负数
//		printf("b");
//	if (c == 0xb6000000)//c是int类型的(等于四个字节)，不需要进行整形提升
//		printf("c");    //这里就是判断c的值与0xb6000000是否相等
//	return 0;
//}




//int main()
//{
//	char a = 0xb6;
//	//0xb6的原码: 10110110
//	//a在内存中存的值: 11001010
//	//a提升为int类型的补码:11111111111111111111111111001010
//	//a提升为int类型的原码:10000000000000000000000000110110 ,即-54
//	printf("%d\n", a);
//	return 0;
//}



int main()
{
	int a = 0B11111111111111111111111111111111;
	//a在内存中存储的补码:11111111111111111111111111111111
	int b = 0xffffffff;
	//0xffffffff转换成二进制是11111111111111111111111111111111，b在内存中存储的补码:11111111111111111111111111111111

	int c = -1;

	//-1的原码:10000000000000000000000000000001
	//-1的补码:11111111111111111111111111111111
	//则c在内存中存储的补码:11111111111111111111111111111111
	printf("%d %d %d", a,b,c);
	return 0;
}

